package com.jvyou.thread.d09safe2;

/**
 * @author 橘柚
 * @version 1.0-SNAPSHOT
 * @Date 2024/7/31 11:21
 * @Description
 */
public class TicketRunnable implements Runnable {

    // ticket 并没有被 static 修饰，那是因为 TicketRunnable 对象只被创建一次对象，分给三个线程，所以三个线程的ticket 是共享的
    int ticket = 0;

    @Override
    public void run() {
        while (true) {
            if (sell()) break;
        }
    }

    /**
     * sell 方法的锁是 this，同样 this 也是共享的
     *
     * @return 是否卖完
     */
    private synchronized boolean sell() {
        if (ticket < 100) {
            ticket++;
            System.out.println(Thread.currentThread().getName() + "卖票：" + ticket);
        } else {
            return true;
        }
        return false;
    }
}
